package com.zh.note.leetcode.dp;

/**
 * 53. 最大子数组和
 * dp[i]   以nums[i]为结尾的最大连续子序列和
 * dp[i]= d[i-1]+nums[i]
 */
public class LC_53_maxSubArray {
    public int maxSubArray(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int res = nums[0];
        // dp[i]以nums[i]为结尾的最大连续子序列和
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
            if (dp[i] > res) {
                res = dp[i];
            }
        }
        return res;
    }

    public int maxSubArray2(int[] nums) {
        int sum = 0;
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < nums.length; i++) {
            if (sum < 0) {
                sum = nums[i];
            } else {
                sum += nums[i];
            }
            max = Math.max(max, sum);

        }
        return max;
    }
}
